Плохо! Плохо!:  0
Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 11

Тема: [MV -+ MZ]PictureOnSkillObserve

  1. #1
    Бывалый Аватар для Darchan Kaen
    Информация о пользователе
    Регистрация
    17.06.2013
    Адрес
    Одесса
    Сообщений
    851
    Записей в дневнике
    3
    Репутация: 47 Добавить или отнять репутацию

    По умолчанию [MV -+ MZ]PictureOnSkillObserve

    Название плагина: DKR_PictureOnSkillObserve
    Автор: DarchanKaen (основной плагин), Yoji Ojima (честно сворована техника отображения текста картинкой)
    Версия: 2.0
    Дата выхода:
    Версия 2.0 - 27.05.2021.
    Версия 1.0 - 24.05.2021
    Описание плагина:
    Плагин позволяет отображать Картинку / Описание при выборе скила в бою, для каждого скила - свою.

    Использование плагина:
    Одинаково и для MV , и для MZ (в эвенте, в команде "Скрипт")!

    В Примечании к Скилу напишите:
    <ImageOnChooseSkill>
    Название файла картинки БЕЗ РАСШИРЕНИЯ И КАВЫЧЕК! (например: Actor1 )
    </ImageOnChooseSkill>
    И / ИЛИ
    <DescrOnChooseSkill>
    Текст описания. Допустимы коды сообщений, например: цвета типа \C[n]
    </DescrOnChooseSkill>

    - Включение и отключение показа Картинки:
    DKR.PictureOnSkillObserve.enablePicture(); - показывать Картинку / Описание.
    DKR.PictureOnSkillObserve.dissablePicture(); - не показывать Картинку / Описание.
    DKR.PictureOnSkillObserve.setObserverPictureMode(' MODE'); - задать режим отображения Картинки / Описания, где 'MODE' - режим, варианты:

    'IMAGE' (Картинка, указанная между тегов ImageOnChooseSkill в Примечании скила),
    'DATA' (Полное описание - генерируется автоматически),
    'SIMPLE' (Упрощенное описание - генерируется автоматически),
    'DESCR' (Текст между тегов DescrOnChooseSkill, указанный в Примечании скила).
    По-умолчанию работает режим 'DATA' !

    - Настройки отображения Картинки:
    DKR.PictureOnSkillObserve.setPictureNumber(); - задать номер Картинки; по-умолчанию: 1.
    DKR.PictureOnSkillObserve.setPictureOrigin(); - задать начало координат Картинки; по-умолчанию: 0.
    DKR.PictureOnSkillObserve.setPictureCoordX(); - задать координату X Картинки; по-умолчанию: 20.
    DKR.PictureOnSkillObserve.setPictureCoordY(); - задать координату Y Картинки; по-умолчанию: 300.
    DKR.PictureOnSkillObserve.setPictureScaleX(); - задать масштаб X Картинки; по-умолчанию: 100.
    DKR.PictureOnSkillObserve.setPictureScaleY(); - задать масштаб Y Картинки; по-умолчанию: 100.
    DKR.PictureOnSkillObserve.setPictureOpacity(); - задать прозрачность Картинки; по-умолчанию: 255.
    DKR.PictureOnSkillObserve.setPictureBlendMode (); - задать режим смешивания Картинки; по-умолчанию: 0.

    Спойлер Код плагина:


    Спойлер MV, версия 2.0:

    Код:
    /*:
     *-----------------------------------------------------------------------------
     *  DKR PictureOnSkillObserve
     *-----------------------------------------------------------------------------
     *  For: RPGMAKER MV 
     *  DKR_PictureOnSkillObserve_2_MV.js
     *-----------------------------------------------------------------------------
     *  26.05.2021 - Версия 2.0.0
     *-----------------------------------------------------------------------------
     * Поставляется AS-IS.
     * Вся ответственность при использовании - на Пользователе!
     *-----------------------------------------------------------------------------
     *-----------------------------------------------------------------------------
     * @author DarchanKaen
     * @target MV
     * @plugindesc (v.2.0.0) Плагин позволяет отображать Картинку / Описание при выборе скила в бою, для каждого скила - свою.
     * @help
     *   DKR PictureOnSkillObserve 2.0 MV
     * ----------------------------------------------------------------------------
     * ---Общая информация:
     * Плагин позволяет отображать Картинку или Описание
     * (автоматическое или ручное) при выборе скила в бою,
     * для каждого скила - свою Картинку / Описание.
     * Картина / Описание отображается в фоне Окна умений.
     * Для режима Картинок, они должны быть в папке "\img\pictures".
     * Для режимов Описания, в папке "\img\pictures" должен быть (!!!) 
     * файл "onSkillObserveBackground.png" - это фон описания 
     * (размер изображения 816x624).
     * ---Использование:
     * В Примечании к Скилу напишите:
     *<ImageOnChooseSkill>
     *	Название файла картинки БЕЗ РАСШИРЕНИЯ И КАВЫЧЕК! (например: Actor1 )
     *</ImageOnChooseSkill>
     * И / ИЛИ
     * <DescrOnChooseSkill>
     * 	Текст описания. Допустимы коды сообщений, например цвета типа \C[n]...
     * </DescrOnChooseSkill>
     * Если у скила в Примечании нет данных тегов, то ничего доп-го не отображается.
     * ---Команды (для раздела "Скрипт"):
     * - Включение и отключение показа Картинки / Описания:
     * DKR.PictureOnSkillObserve.enablePicture(); - показывать Картинку / Описание.
     * DKR.PictureOnSkillObserve.dissablePicture(); - не показывать Картинку / Описание. 
     * DKR.PictureOnSkillObserve.dissablePicture(); - не показывать Картинку / Описание. 
     * DKR.PictureOnSkillObserve.setObserverPictureMode('MODE'); - задать режим отображения Картинки / Описания.
     * где 'MODE' - режим, варианты: 
     * 'IMAGE' (Картинка), 
     * 'DATA' (Полное описание), 
     * 'SIMPLE' (Упрощеное описание), 
     * 'DESCR' (Текст между тегов DescrOnChooseSkill).
     * режим указывается в ковычках, режим может быть выбрано ТОЛЬКО один; по-умолчанию: 'DATA'.
      - Настройки отображения Картинки (не влияет на режимы Описания!):
     * DKR.PictureOnSkillObserve.setPictureNumber(N); - задать номер Картинки; по-умолчанию: 90. Номер должен меньше 95!
     * DKR.PictureOnSkillObserve.setPictureOrigin(N); - задать начало координат Картинки; по-умолчанию: 0.
     * DKR.PictureOnSkillObserve.setPictureCoordX(N); - задать координату X Картинки; по-умолчанию: 20.
     * DKR.PictureOnSkillObserve.setPictureCoordY(N); - задать координату Y Картинки; по-умолчанию: 300.
     * DKR.PictureOnSkillObserve.setPictureScaleX(N); - задать масштаб X Картинки; по-умолчанию: 100.
     * DKR.PictureOnSkillObserve.setPictureScaleY(N); - задать масштаб Y Картинки; по-умолчанию: 100.
     * DKR.PictureOnSkillObserve.setPictureOpacity(N); - задать прозрачность Картинки; по-умолчанию: 255.
     * DKR.PictureOnSkillObserve.setPictureBlendMode(N); - задать режим смешивания Картинки; по-умолчанию: 0.
     * где N - значание в виде целого не отрицательного числа.
     * ----------------------------------------------------------------------------
    */ 
    
    var Imported = Imported || {};
    Imported.DKR_PictureOnSkillObserve = true;
    
    var DKR = DKR || {};          
    DKR.PictureOnSkillObserve = DKR.PictureOnSkillObserve || {}; 
    DKR.PictureOnSkillObserve.version = 2.0;
    
    
    ( () => {
    	
    	let picIsShow = true;
    	let textIsShow = true;
    	let picNumber = 1;
    	let picOrigin = 0;
    	let picCoordX = 20;
    	let picCoordY = 300;
    	let picScaleX = 100;
    	let picScaleY = 100;
    	let picOpacity = 255;
    	let picBlendMode = 0;
    	
    	let observerPictureMode = 'DATA';
    	
    	const skillDescrBackgroundImageSRC = 'onSkillObserveBackground';
    	const skillDescrBackgroundOrigin = 0;
    	const skillDescrBackgroundCoordX = 0;
    	const skillDescrBackgroundCoordY = 0;
    	const skillDescrBackgroundScaleX = 100;
    	const skillDescrBackgroundScaleY = 100;
    	const skillDescrBackgroundOpacity = 255;
    	const skillDescrBackgroundBlendMode = 0;
    	
    	let textPictureText = '';
    	const skillDescrTextOrigin = 0;
    	const skillDescrTextCoordX = 25;
    	const skillDescrTextCoordY = 175;
    	const skillDescrTextScaleX = 100;
    	const skillDescrTextScaleY = 100;
    	const skillDescrTextOpacity = 255;
    	const skillDescrTextBlendMode = 0;
    	
    	const normalColorTag = '\\C[0]';
    	const nameColorTag = '\\C[4]';
    	const mpCostColorTag = '\\C[1]';
    	const tpCostColorTag = '\\C[3]';
    	const tpGenColorTag = '\\C[11]';
    	const formulaColorTag = '\\C[8]';
    	const elementColorTag = '\\C[7]';
    	const simpleDescrColorTag = '\\C[6]';
    	const isCanCritColorTag = '\\C[10]';
    	const varianceColorTag = '\\C[14]';
    	const repeatsColorTag = '\\C[20]';
    	const statesColorTag = '\\C[27]';
    	const targetColorTag = '\\C[18]';
    	const damageTypeColorTag = '\\C[5]';
    
    	
    	
    	
    	DKR.PictureOnSkillObserve.Window_SkillList__UpdateHelp = Window_SkillList.prototype.updateHelp;
    	Window_SkillList.prototype.updateHelp = function(){
    		DKR.PictureOnSkillObserve.Window_SkillList__UpdateHelp.call(this);
    		
    		if(undefined === this.item()){
    			console.log('DKR.PictureOnSkillObserve: skill undefined...');
    			return;
    		}
    		
    		getSkillTextBySkilLData( getSkillDataToDraw(this.item()) );
    		
    		if(true === picIsShow){
    			
    			try{
    				if('IMAGE' === observerPictureMode){
    					let imageSRC = parseNotesForImageSRC(this.item());
    					$gameScreen.showPicture(picNumber, imageSRC, picOrigin, picCoordX, picCoordY, picScaleX, picScaleY, picOpacity, picBlendMode);
    				}else{
    					textIsShow = true;
    					$gameScreen.showPicture(picNumber, skillDescrBackgroundImageSRC, skillDescrBackgroundOrigin, skillDescrBackgroundCoordX, skillDescrBackgroundCoordY, skillDescrBackgroundScaleX, skillDescrBackgroundScaleY, skillDescrBackgroundOpacity, skillDescrBackgroundBlendMode);
    					
    					if('DATA' === observerPictureMode){
    						textPictureText = getSkillTextBySkilLData( getSkillDataToDraw(this.item()), true );
    					}else if('SIMPLE' === observerPictureMode){
    						textPictureText = getSkillTextBySkilLData( getSkillDataToDraw(this.item()), false );
    					}else if('DESCR' === observerPictureMode){
    						textPictureText = parseNotesForDescription(this.item());
    					}
    					$gameScreen.showPicture(picNumber + 1, "", picOrigin, skillDescrTextCoordX, skillDescrTextCoordY, skillDescrTextScaleX, skillDescrTextScaleY, skillDescrTextOpacity, skillDescrTextBlendMode);
    				}
    				
    			}catch (e) {
    				console.log('DKR.PictureOnSkillObserve: skill not exist or wrong notetag!');
    				return;
    			}
    		}
    		
    	}
    	
    	DKR.PictureOnSkillObserve.Scene_Battle__onSkillCancel = Scene_Battle.prototype.onSkillCancel;
    	Scene_Battle.prototype.onSkillCancel = function() {
    		DKR.PictureOnSkillObserve.Scene_Battle__onSkillCancel.call(this);
    		
    		if(true === picIsShow){
    			$gameScreen.erasePicture(picNumber);
    			if(true === textIsShow){
    				$gameScreen.erasePicture(picNumber + 1);
    			}
    		}
    	}
    	
    	DKR.PictureOnSkillObserve.Scene_Battle__onSkillOk = Scene_Battle.prototype.onSkillOk;
    	Scene_Battle.prototype.onSkillOk = function() {
    		DKR.PictureOnSkillObserve.Scene_Battle__onSkillOk.call(this);
    		
    		if(true === picIsShow){
    			$gameScreen.erasePicture(picNumber);
    			if(true === textIsShow){
    				$gameScreen.erasePicture(picNumber + 1);
    			}
    		}
    	};
    		
    	
    
    	let parseNotesForImageSRC = function(skill){
    		let notedata = skill.note.split(/[\r\n]+/);
    		let imageSRC = '';
    		let tag = 'ImageOnChooseSkill';
    		
    		for (let i = 0; i < notedata.length; i++) {
    			let line = notedata[i];
    			if (notedata[i].match(tag)) {
    				imageSRC = notedata[i + 1];
    				break;
    			}
    		}
    		
    		return imageSRC;
    	}
    
    	let parseNotesForDescription = function(skill){
    		let notedata = skill.note.split(/[\r\n]+/);
    		let descrText = '';
    		let tag = 'DescrOnChooseSkill';
    		let matchCount = 0;
    		for (let i = 0; i < notedata.length; i++) {
    			let line = notedata[i];
    			if (notedata[i].match(tag)) {
    				matchCount++;
    				if(2 === matchCount){
    					break;
    				}else{
    					descrText = '\\}\r\n';
    					continue;
    				}
    			}
    			if(1 === matchCount){
    				descrText += notedata[i] + '\r\n';
    			}
    		}
    		descrText += '\\{';
    		
    		return descrText;
    	}
    
    
    	
    	let getSkillDataToDraw = function(skill){
    		let skillName = skill.name;
    		let skillMpCost = skill.mpCost;
    		let skillTpCost = skill.tpCost;
    		let skillTpGain = skill.tpGain;
    		let skillDescr = skill.description;
    		let skillFormula = skill.damage.formula;
    		
    		let skillElement = 'Нет элемента';
    		if(0 === skill.damage.elementId){
    			skillElement = 'Обычная атака';
    		}else if(skill.damage.elementId >-1){
    			skillElement = $dataSystem.elements[skill.damage.elementId];
    		}
    		
    		let isSkillCanCrit = '';
    		if(true === skill.damage.critical){
    			isSkillCanCrit = 'Да';
    		}else{
    			isSkillCanCrit = 'Нет';
    		}
    		
    		let isSkillCanVariance = skill.damage.variance;
    		let skillRepeats = skill.repeats;
    		
    		let skillAddStates = [];
    		for(let n = 0; n < skill.effects.length; n++){
    			if(null === skill.effects[n]){
    				continue;
    			}
    			if(0 === skill.effects[n].dataId){
    				continue;
    			}
    			let statusId = skill.effects[n].dataId;
    			skillAddStates[n] = [$dataStates[statusId].name, skill.effects[n].value1 * 100];
    		}
    		if(0 === skillAddStates.length){
    			skillAddStates = [['Не накладывает статус!', 0]];
    		}
    		
    		let skillTarget = ''; 
    		switch(skill.scope){
    			case 0:
    				skillTarget = 'Нет цели';
    				break;
    			case 1:
    				skillTarget = '1 Враг';
    				break;
    			case 2:
    				skillTarget = 'Все Враги';
    				break;
    			case 3:
    				skillTarget = '1 случайный Враг';
    				break;
    			case 4:
    				skillTarget = '2 случайных Врага';
    				break;
    			case 5:
    				skillTarget = '3 случайных Врага';
    				break;
    			case 6:
    				skillTarget = '4 случайных Врага';
    				break;
    			case 7:
    				skillTarget = '1 Союзник';
    				break;
    			case 8:
    				skillTarget = 'Все Союзники';
    				break;
    			case 9:
    				skillTarget = '1 мертвый Союзник';
    				break;
    			case 10:
    				skillTarget = 'Все мертвые Союзники';
    				break;
    			case 11:
    				skillTarget = 'Сам кастер';
    				break;
    			default:
    				skillTarget = '???';
    				break;
    		}
    		
    		let skillDamageType = ''; 
    		switch(skill.damage.type){
    			case 0:
    				skillDamageType = 'Нет типа';
    				break;
    			case 1:
    				skillDamageType = 'Урон ХП';
    				break;
    			case 2:
    				skillDamageType = 'Урон МП';
    				break;
    			case 3:
    				skillDamageType = 'Восст-е ХП';
    				break;
    			case 4:
    				skillDamageType = 'Восстн-е МП';
    				break;
    			case 5:
    				skillDamageType = 'Вамп-м ХП';
    				break;
    			case 6:
    				skillDamageType = 'Вамп-м МП';
    				break;
    		}
    		
    		let skillDataToDisplay = [skillName, skillMpCost, skillTpCost, skillTpGain, skillDescr, skillFormula, skillElement, isSkillCanCrit, isSkillCanVariance, skillRepeats, skillAddStates, skillTarget, skillDamageType];
    		return skillDataToDisplay;
    	}
    	
    	
    	let getSkillTextBySkilLData = function(skillData, isFullText){	
    		let skillText = '';
    	
    		if(true === isFullText){
    		skillText = `\\}
    ${targetColorTag}Цель:${normalColorTag} ${skillData[11]} | ${damageTypeColorTag}Тип:${normalColorTag} ${skillData[12]}  			
    ${mpCostColorTag}Стоимость МП:${normalColorTag} ${skillData[1]} | ${tpCostColorTag}Стоимость ТП:${normalColorTag} ${skillData[2]} | ${tpGenColorTag}Генерация ТП:${normalColorTag} ${skillData[3]}
    ${formulaColorTag}Формула:${normalColorTag} ${skillData[5]} | ${elementColorTag}Элемент:${normalColorTag} ${skillData[6]}
    ${isCanCritColorTag}Может критовать:${normalColorTag} ${skillData[7]} | ${varianceColorTag}Разброс урона:${normalColorTag} ${skillData[8]}% | ${repeatsColorTag}Повторения:${normalColorTag} ${skillData[9]}
    ${statesColorTag}Накладывает состояния:${normalColorTag} `;
    
    			for(let n = 0; n < skillData[10].length; n++){
    				let currentStatus = skillData[10][n];
    				if(undefined === currentStatus){
    					continue;
    				}
    				skillText += currentStatus[0] + '(' + currentStatus[1] + '%)'+ '\r\n';	
    			}
    			skillText += '\\{';
    		}else{
    			skillText = `\\}
    ${nameColorTag}Название:${normalColorTag} ${skillData[0]} | ${targetColorTag}Цель:${normalColorTag} ${skillData[11]} 		
    ${mpCostColorTag}Стоимость МП:${normalColorTag} ${skillData[1]} | ${tpCostColorTag}Стоимость ТП:${normalColorTag} ${skillData[2]} | ${tpGenColorTag}Генерация ТП:${normalColorTag} ${skillData[3]}
    ${simpleDescrColorTag}Описание:${normalColorTag}
    ${skillData[4]} \\{`
    		}
    
    		return skillText;
    	}
    	
    	
    
    	DKR.PictureOnSkillObserve.enablePicture = function(){
    		picIsShow = true;
    	}
    	DKR.PictureOnSkillObserve.dissablePicture = function(){
    		picIsShow = false;
    	}
    	DKR.PictureOnSkillObserve.setObserverPictureMode = function(MODE){
    		observerPictureMode = MODE;
    	}
    	
    	
    	DKR.PictureOnSkillObserve.setPictureNumber = function(pNumber){
    		if(pNumber < 0){
    			console.log('DKR.PictureOnSkillObserve: picture number can`t be below zero!');
    			return;
    		}else if(pNumber > 95){
    			console.log('DKR.PictureOnSkillObserve: picture number can`t be more then 90!');
    			return;
    		}
    		picNumber = pNumber;
    	}
    	
    	DKR.PictureOnSkillObserve.setPictureOrigin = function(pOrigin){
    		picOrigin = pOrigin;
    	}
    	
    	DKR.PictureOnSkillObserve.setPictureCoordX = function(pCoordX){
    		if(pCoordX < 0){
    			console.log('DKR.PictureOnSkillObserve: picture coordinate X can`t be below zero!');
    			return;
    		}
    		picCoordX = pCoordX;
    	}
    	
    	DKR.PictureOnSkillObserve.setPictureCoordY = function(pCoordY){
    		if(pCoordY < 0){
    			console.log('DKR.PictureOnSkillObserve: picture coordinate Y can`t be below zero!');
    			return;
    		}
    		picCoordY = pCoordY;
    	}
    	
    	DKR.PictureOnSkillObserve.setPictureScaleX = function(pScaleX){
    		if(pScaleX < 0){
    			console.log('DKR.PictureOnSkillObserve: picture scale X can`t be below zero!');
    			return;
    		}
    		picScaleX = pScaleX;
    	}
    	
    	DKR.PictureOnSkillObserve.setPictureScaleY = function(pScaleY){
    		if(pScaleY < 0){
    			console.log('DKR.PictureOnSkillObserve: picture scale Y can`t be below zero!');
    			return;
    		}
    		picScaleX = pScaleX;
    	}
    	
    	DKR.PictureOnSkillObserve.setPictureOpacity = function(pOpacity){
    		picOpacity = pOpacity;
    	}
    	
    	DKR.PictureOnSkillObserve.setPictureBlendMode = function(pBlendMode ){
    		picBlendMode  = pBlendMode ;
    	}
    	
    	
    	
    	
    	//Thanks to Yoji Ojima
    	const _Game_Picture_show = Game_Picture.prototype.show;
        Game_Picture.prototype.show = function() {
            _Game_Picture_show.apply(this, arguments);
            if (this._name === "" && textPictureText) {
    			console.log('textPictureText:');
    			console.log(textPictureText);
                this.mzkp_text = textPictureText;
                this.mzkp_textChanged = true;
                textPictureText = '';
            }
        };
    	
    	const _Sprite_Picture_destroy = Sprite_Picture.prototype.destroy;
        Sprite_Picture.prototype.destroy = function() {
            destroyTextPictureBitmap(this.bitmap);
            _Sprite_Picture_destroy.apply(this, arguments);
        };
    
        const _Sprite_Picture_updateBitmap = Sprite_Picture.prototype.updateBitmap;
        Sprite_Picture.prototype.updateBitmap = function() {
            _Sprite_Picture_updateBitmap.apply(this, arguments);
            if (this.visible && this._pictureName === "") {
                const picture = this.picture();
                const text = picture ? picture.mzkp_text || "" : "";
                const textChanged = picture && picture.mzkp_textChanged;
                if (this.mzkp_text !== text || textChanged) {
                    this.mzkp_text = text;
                    destroyTextPictureBitmap(this.bitmap);
                    this.bitmap = createTextPictureBitmap(text);
                    picture.mzkp_textChanged = false;
                }
            } else {
                this.mzkp_text = "";
            }
        };
    
        function createTextPictureBitmap(text) {
            const tempWindow = new Window_Base(new Rectangle());
            const size = {width:750, height: 300}; //MV: hardcode //MZ: textSizeEx(text)
            tempWindow.padding = 0;
            tempWindow.move(0, 0, size.width, size.height);
            tempWindow.createContents();
            tempWindow.drawTextEx(text, 0, 0, 0);
            const bitmap = tempWindow.contents;
            tempWindow.contents = null;
            tempWindow.destroy();
            bitmap.mzkp_isTextPicture = true;
            return bitmap;
        }
    
        function destroyTextPictureBitmap(bitmap) {
            if (bitmap && bitmap.mzkp_isTextPicture) {
                bitmap.clear();
            }
        }
    	
    	
    
    })();


    Спойлер MZ, версия 2.0:

    Код:
    /*:
     *-----------------------------------------------------------------------------
     *  DKR PictureOnSkillObserve
     *-----------------------------------------------------------------------------
     *  For: RPGMAKER MZ
     *  DKR_PictureOnSkillObserve_2.0_MZ.js
     *-----------------------------------------------------------------------------
     *  26.05.2021 - Версия 2.0.0
     *-----------------------------------------------------------------------------
     * Поставляется AS-IS.
     * Вся ответственность при использовании - на Пользователе!
     *-----------------------------------------------------------------------------
     *-----------------------------------------------------------------------------
     * @author DarchanKaen
     * @target MZ
     * @plugindesc (v.2.0.0) Плагин позволяет отображать Картинку / Описание при выборе скила в бою, для каждого скила - свою.
     * @help
     *   DKR PictureOnSkillObserve 2.0 MZ
     * ----------------------------------------------------------------------------
     * ---Общая информация:
     * Плагин позволяет отображать Картинку или Описание
     * (автоматическое или ручное) при выборе скила в бою,
     * для каждого скила - свою Картинку / Описание.
     * Картина / Описание отображается в фоне Окна умений.
     * Для режима Картинок, они должны быть в папке "\img\pictures".
     * Для режимов Описания, в папке "\img\pictures" должен быть (!!!) 
     * файл "onSkillObserveBackground.png" - это фон описания 
     * (размер изображения 816x624).
     * ---Использование:
     * В Примечании к Скилу напишите:
     *<ImageOnChooseSkill>
     *	Название файла картинки БЕЗ РАСШИРЕНИЯ И КАВЫЧЕК! (например: Actor1 )
     *</ImageOnChooseSkill>
     * И / ИЛИ
     * <DescrOnChooseSkill>
     * 	Текст описания. Допустимы коды сообщений, например цвета типа \C[n]...
     * </DescrOnChooseSkill>
     * Если у скила в Примечании нет данных тегов, то ничего доп-го не отображается.
     * ---Команды (для раздела "Скрипт"):
     * - Включение и отключение показа Картинки / Описания:
     * DKR.PictureOnSkillObserve.enablePicture(); - показывать Картинку / Описание.
     * DKR.PictureOnSkillObserve.dissablePicture(); - не показывать Картинку / Описание. 
     * DKR.PictureOnSkillObserve.dissablePicture(); - не показывать Картинку / Описание. 
     * DKR.PictureOnSkillObserve.setObserverPictureMode('MODE'); - задать режим отображения Картинки / Описания.
     * где 'MODE' - режим, варианты: 
     * 'IMAGE' (Картинка), 
     * 'DATA' (Полное описание), 
     * 'SIMPLE' (Упрощеное описание), 
     * 'DESCR' (Текст между тегов DescrOnChooseSkill).
     * режим указывается в ковычках, режим может быть выбрано ТОЛЬКО один; по-умолчанию: 'DATA'.
      - Настройки отображения Картинки (не влияет на режимы Описания!):
     * DKR.PictureOnSkillObserve.setPictureNumber(N); - задать номер Картинки; по-умолчанию: 90. Номер должен меньше 95!
     * DKR.PictureOnSkillObserve.setPictureOrigin(N); - задать начало координат Картинки; по-умолчанию: 0.
     * DKR.PictureOnSkillObserve.setPictureCoordX(N); - задать координату X Картинки; по-умолчанию: 20.
     * DKR.PictureOnSkillObserve.setPictureCoordY(N); - задать координату Y Картинки; по-умолчанию: 300.
     * DKR.PictureOnSkillObserve.setPictureScaleX(N); - задать масштаб X Картинки; по-умолчанию: 100.
     * DKR.PictureOnSkillObserve.setPictureScaleY(N); - задать масштаб Y Картинки; по-умолчанию: 100.
     * DKR.PictureOnSkillObserve.setPictureOpacity(N); - задать прозрачность Картинки; по-умолчанию: 255.
     * DKR.PictureOnSkillObserve.setPictureBlendMode(N); - задать режим смешивания Картинки; по-умолчанию: 0.
     * где N - значание в виде целого не отрицательного числа.
     * ----------------------------------------------------------------------------
    */ 
    
    var Imported = Imported || {};
    Imported.DKR_PictureOnSkillObserve = true;
    
    var DKR = DKR || {};          
    DKR.PictureOnSkillObserve = DKR.PictureOnSkillObserve || {}; 
    DKR.PictureOnSkillObserve.version = 2.0;
    
    
    ( () => {
    	
    	let picIsShow = true;
    	let textIsShow = true;
    	let picNumber = 90;
    	let picOrigin = 0;
    	let picCoordX = 20;
    	let picCoordY = 300;
    	let picScaleX = 100;
    	let picScaleY = 100;
    	let picOpacity = 255;
    	let picBlendMode = 0;
    	
    	let observerPictureMode = 'DATA'; //IMAGE, DATA, SIMPLE, DESCR
    	
    	const skillDescrBackgroundImageSRC = 'onSkillObserveBackground';
    	const skillDescrBackgroundOrigin = 0;
    	const skillDescrBackgroundCoordX = 0;
    	const skillDescrBackgroundCoordY = 0;
    	const skillDescrBackgroundScaleX = 100;
    	const skillDescrBackgroundScaleY = 100;
    	const skillDescrBackgroundOpacity = 255;
    	const skillDescrBackgroundBlendMode = 0;
    	
    	let textPictureText = '';
    	const skillDescrTextOrigin = 0;
    	const skillDescrTextCoordX = 25;
    	const skillDescrTextCoordY = 75;
    	const skillDescrTextScaleX = 100;
    	const skillDescrTextScaleY = 100;
    	const skillDescrTextOpacity = 255;
    	const skillDescrTextBlendMode = 0;
    	
    	const normalColorTag = '\\C[0]';
    	const nameColorTag = '\\C[4]';
    	const mpCostColorTag = '\\C[1]';
    	const tpCostColorTag = '\\C[3]';
    	const tpGenColorTag = '\\C[11]';
    	const formulaColorTag = '\\C[8]';
    	const elementColorTag = '\\C[7]';
    	const simpleDescrColorTag = '\\C[6]';
    	const isCanCritColorTag = '\\C[10]';
    	const varianceColorTag = '\\C[14]';
    	const repeatsColorTag = '\\C[20]';
    	const statesColorTag = '\\C[27]';
    	const targetColorTag = '\\C[18]';
    	const damageTypeColorTag = '\\C[5]';
    
    
    
    	
    	DKR.PictureOnSkillObserve.Window_SkillList__UpdateHelp = Window_SkillList.prototype.updateHelp;
    	Window_SkillList.prototype.updateHelp = function(){
    		DKR.PictureOnSkillObserve.Window_SkillList__UpdateHelp.call(this);
    		
    		if(undefined === this.item()){
    			console.log('DKR.PictureOnSkillObserve: skill undefined...');
    			return;
    		}
    		
    		getSkillTextBySkilLData( getSkillDataToDraw(this.item()) );
    		
    		if(true === picIsShow){
    			
    			try{
    				if('IMAGE' === observerPictureMode){
    					let imageSRC = parseNotesForImageSRC(this.item());
    					$gameScreen.showPicture(picNumber, imageSRC, picOrigin, picCoordX, picCoordY, picScaleX, picScaleY, picOpacity, picBlendMode);
    				}else{
    					textIsShow = true;
    					$gameScreen.showPicture(picNumber, skillDescrBackgroundImageSRC, skillDescrBackgroundOrigin, skillDescrBackgroundCoordX, skillDescrBackgroundCoordY, skillDescrBackgroundScaleX, skillDescrBackgroundScaleY, skillDescrBackgroundOpacity, skillDescrBackgroundBlendMode);
    					
    					if('DATA' === observerPictureMode){
    						textPictureText = getSkillTextBySkilLData( getSkillDataToDraw(this.item()), true );
    					}else if('SIMPLE' === observerPictureMode){
    						textPictureText = getSkillTextBySkilLData( getSkillDataToDraw(this.item()), false );
    					}else if('DESCR' === observerPictureMode){
    						textPictureText = parseNotesForDescription(this.item());
    					}
    					$gameScreen.showPicture(picNumber + 1, "", picOrigin, skillDescrTextCoordX, skillDescrTextCoordY, skillDescrTextScaleX, skillDescrTextScaleY, skillDescrTextOpacity, skillDescrTextBlendMode);
    				}
    				
    			}catch (e) {
    				console.log('DKR.PictureOnSkillObserve: skill not exist or wrong notetag!');
    				return;
    			}
    		}
    		
    	}
    	
    	DKR.PictureOnSkillObserve.Scene_Battle__onSkillCancel = Scene_Battle.prototype.onSkillCancel;
    	Scene_Battle.prototype.onSkillCancel = function() {
    		DKR.PictureOnSkillObserve.Scene_Battle__onSkillCancel.call(this);
    		
    		if(true === picIsShow){
    			$gameScreen.erasePicture(picNumber);
    			if(true === textIsShow){
    				$gameScreen.erasePicture(picNumber + 1);
    			}
    		}
    	}
    	
    	DKR.PictureOnSkillObserve.Scene_Battle__onSkillOk = Scene_Battle.prototype.onSkillOk;
    	Scene_Battle.prototype.onSkillOk = function() {
    		DKR.PictureOnSkillObserve.Scene_Battle__onSkillOk.call(this);
    		
    		if(true === picIsShow){
    			$gameScreen.erasePicture(picNumber);
    			if(true === textIsShow){
    				$gameScreen.erasePicture(picNumber + 1);
    			}
    		}
    	};
    	
    	
    	
    	let parseNotesForImageSRC = function(skill){
    		let notedata = skill.note.split(/[\r\n]+/);
    		let imageSRC = '';
    		let tag = 'ImageOnChooseSkill';
    		
    		for (let i = 0; i < notedata.length; i++) {
    			let line = notedata[i];
    			if (notedata[i].match(tag)) {
    				imageSRC = notedata[i + 1];
    				break;
    			}
    		}
    		
    		return imageSRC;
    	}
    
    	let parseNotesForDescription = function(skill){
    		let notedata = skill.note.split(/[\r\n]+/);
    		let descrText = '';
    		let tag = 'DescrOnChooseSkill';
    		let matchCount = 0;
    		for (let i = 0; i < notedata.length; i++) {
    			let line = notedata[i];
    			if (notedata[i].match(tag)) {
    				matchCount++;
    				if(2 === matchCount){
    					break;
    				}else{
    					descrText = '\r\n';
    					continue;
    				}
    			}
    			if(1 === matchCount){
    				descrText += notedata[i] + '\r\n'
    			}
    		}
    		
    		return descrText;
    	}
    
    
    	
    	let getSkillDataToDraw = function(skill){
    		let skillName = skill.name;
    		let skillMpCost = skill.mpCost;
    		let skillTpCost = skill.tpCost;
    		let skillTpGain = skill.tpGain;
    		let skillDescr = skill.description;
    		let skillFormula = skill.damage.formula;
    		
    		let skillElement = 'Нет элемента';
    		if(0 === skill.damage.elementId){
    			skillElement = 'Обычная атака';
    		}else if(skill.damage.elementId >-1){
    			skillElement = $dataSystem.elements[skill.damage.elementId];
    		}
    		
    		let isSkillCanCrit = '';
    		if(true === skill.damage.critical){
    			isSkillCanCrit = 'Да';
    		}else{
    			isSkillCanCrit = 'Нет';
    		}
    		
    		let isSkillCanVariance = skill.damage.variance;
    		let skillRepeats = skill.repeats;
    		
    		let skillAddStates = [];
    		for(let n = 0; n < skill.effects.length; n++){
    			if(null === skill.effects[n]){
    				continue;
    			}
    			if(0 === skill.effects[n].dataId){
    				continue;
    			}
    			let statusId = skill.effects[n].dataId;
    			skillAddStates[n] = [$dataStates[statusId].name, skill.effects[n].value1 * 100];
    		}
    		if(0 === skillAddStates.length){
    			skillAddStates = [['Не накладывает статус!', 0]];
    		}
    		
    		let skillTarget = ''; 
    		switch(skill.scope){
    			case 0:
    				skillTarget = 'Нет цели';
    				break;
    			case 1:
    				skillTarget = '1 Враг';
    				break;
    			case 2:
    				skillTarget = 'Все Враги';
    				break;
    			case 3:
    				skillTarget = '1 случайный Враг';
    				break;
    			case 4:
    				skillTarget = '2 случайных Врага';
    				break;
    			case 5:
    				skillTarget = '3 случайных Врага';
    				break;
    			case 6:
    				skillTarget = '4 случайных Врага';
    				break;
    			case 7:
    				skillTarget = '1 Союзник';
    				break;
    			case 8:
    				skillTarget = 'Все Союзники';
    				break;
    			case 9:
    				skillTarget = '1 мертвый Союзник';
    				break;
    			case 10:
    				skillTarget = 'Все мертвые Союзники';
    				break;
    			case 11:
    				skillTarget = 'Сам кастер';
    				break;
    			default:
    				skillTarget = '???';
    				break;
    		}
    		
    		let skillDamageType = ''; 
    		switch(skill.damage.type){
    			case 0:
    				skillDamageType = 'Нет типа';
    				break;
    			case 1:
    				skillDamageType = 'Урон ХП';
    				break;
    			case 2:
    				skillDamageType = 'Урон МП';
    				break;
    			case 3:
    				skillDamageType = 'Восст-е ХП';
    				break;
    			case 4:
    				skillDamageType = 'Восстн-е МП';
    				break;
    			case 5:
    				skillDamageType = 'Вамп-м ХП';
    				break;
    			case 6:
    				skillDamageType = 'Вамп-м МП';
    				break;
    		}
    		
    		let skillDataToDisplay = [skillName, skillMpCost, skillTpCost, skillTpGain, skillDescr, skillFormula, skillElement, isSkillCanCrit, isSkillCanVariance, skillRepeats, skillAddStates, skillTarget, skillDamageType];
    		return skillDataToDisplay;
    	}
    	
    	
    	let getSkillTextBySkilLData = function(skillData, isFullText){	
    		let skillText = '';
    	
    		if(true === isFullText){
    			skillText = `
    ${targetColorTag}Цель:${normalColorTag} ${skillData[11]} | ${damageTypeColorTag}Тип:${normalColorTag} ${skillData[12]}  			
    ${mpCostColorTag}Стоимость МП:${normalColorTag} ${skillData[1]} | ${tpCostColorTag}Стоимость ТП:${normalColorTag} ${skillData[2]} | ${tpGenColorTag}Генерация ТП:${normalColorTag} ${skillData[3]}
    ${formulaColorTag}Формула:${normalColorTag} ${skillData[5]} | ${elementColorTag}Элемент:${normalColorTag} ${skillData[6]}
    ${isCanCritColorTag}Может критовать:${normalColorTag} ${skillData[7]} | ${varianceColorTag}Разброс урона:${normalColorTag} ${skillData[8]}% | ${repeatsColorTag}Повторения:${normalColorTag} ${skillData[9]}
    ${statesColorTag}Накладывает состояния:${normalColorTag} `;
    
    			for(let n = 0; n < skillData[10].length; n++){
    				let currentStatus = skillData[10][n];
    				if(undefined === currentStatus){
    					continue;
    				}
    				skillText += currentStatus[0] + '(' + currentStatus[1] + '%)'+ '\r\n';
    			}
    			
    		}else{
    			skillText = `
    ${nameColorTag}Название:${normalColorTag} ${skillData[0]} | ${targetColorTag}Цель:${normalColorTag} ${skillData[11]} 		
    ${mpCostColorTag}Стоимость МП:${normalColorTag} ${skillData[1]} | ${tpCostColorTag}Стоимость ТП:${normalColorTag} ${skillData[2]} | ${tpGenColorTag}Генерация ТП:${normalColorTag} ${skillData[3]}
    ${simpleDescrColorTag}Описание:${normalColorTag}
    ${skillData[4]}`
    		}
    
    		return skillText;
    	}
    	
    
    
    	DKR.PictureOnSkillObserve.enablePicture = function(){
    		picIsShow = true;
    	}
    	DKR.PictureOnSkillObserve.dissablePicture = function(){
    		picIsShow = false;
    	}
    	DKR.PictureOnSkillObserve.setObserverPictureMode = function(MODE){
    		observerPictureMode = MODE;
    	}
    	
    	
    	DKR.PictureOnSkillObserve.setPictureNumber = function(pNumber){
    		if(pNumber < 0){
    			console.log('DKR.PictureOnSkillObserve: picture number can`t be below zero!');
    			return;
    		}else if(pNumber > 95){
    			console.log('DKR.PictureOnSkillObserve: picture number can`t be more then 90!');
    			return;
    		}
    		picNumber = pNumber;
    	}
    	
    	DKR.PictureOnSkillObserve.setPictureOrigin = function(pOrigin){
    		picOrigin = pOrigin;
    	}
    	
    	DKR.PictureOnSkillObserve.setPictureCoordX = function(pCoordX){
    		if(pCoordX < 0){
    			console.log('DKR.PictureOnSkillObserve: picture coordinate X can`t be below zero!');
    			return;
    		}
    		picCoordX = pCoordX;
    	}
    	
    	DKR.PictureOnSkillObserve.setPictureCoordY = function(pCoordY){
    		if(pCoordY < 0){
    			console.log('DKR.PictureOnSkillObserve: picture coordinate Y can`t be below zero!');
    			return;
    		}
    		picCoordY = pCoordY;
    	}
    	
    	DKR.PictureOnSkillObserve.setPictureScaleX = function(pScaleX){
    		if(pScaleX < 0){
    			console.log('DKR.PictureOnSkillObserve: picture scale X can`t be below zero!');
    			return;
    		}
    		picScaleX = pScaleX;
    	}
    	
    	DKR.PictureOnSkillObserve.setPictureScaleY = function(pScaleY){
    		if(pScaleY < 0){
    			console.log('DKR.PictureOnSkillObserve: picture scale Y can`t be below zero!');
    			return;
    		}
    		picScaleX = pScaleX;
    	}
    	
    	DKR.PictureOnSkillObserve.setPictureOpacity = function(pOpacity){
    		picOpacity = pOpacity;
    	}
    	
    	DKR.PictureOnSkillObserve.setPictureBlendMode = function(pBlendMode ){
    		picBlendMode  = pBlendMode ;
    	}
    	
    	
    	
    	
    	//Thanks to Yoji Ojima
    	const _Game_Picture_show = Game_Picture.prototype.show;
        Game_Picture.prototype.show = function() {
            _Game_Picture_show.apply(this, arguments);
            if (this._name === "" && textPictureText) {
                this.mzkp_text = textPictureText;
                this.mzkp_textChanged = true;
                textPictureText = '';
            }
        };
    	
    	const _Sprite_Picture_destroy = Sprite_Picture.prototype.destroy;
        Sprite_Picture.prototype.destroy = function() {
            destroyTextPictureBitmap(this.bitmap);
            _Sprite_Picture_destroy.apply(this, arguments);
        };
    
        const _Sprite_Picture_updateBitmap = Sprite_Picture.prototype.updateBitmap;
        Sprite_Picture.prototype.updateBitmap = function() {
            _Sprite_Picture_updateBitmap.apply(this, arguments);
            if (this.visible && this._pictureName === "") {
                const picture = this.picture();
                const text = picture ? picture.mzkp_text || "" : "";
                const textChanged = picture && picture.mzkp_textChanged;
                if (this.mzkp_text !== text || textChanged) {
                    this.mzkp_text = text;
                    destroyTextPictureBitmap(this.bitmap);
                    this.bitmap = createTextPictureBitmap(text);
                    picture.mzkp_textChanged = false;
                }
            } else {
                this.mzkp_text = "";
            }
        };
    
        function createTextPictureBitmap(text) {
            const tempWindow = new Window_Base(new Rectangle());
            const size = tempWindow.textSizeEx(text);
            tempWindow.padding = 0;
            tempWindow.move(0, 0, size.width, size.height);
            tempWindow.createContents();
            tempWindow.drawTextEx(text, 0, 0, 0);
            const bitmap = tempWindow.contents;
            tempWindow.contents = null;
            tempWindow.destroy();
            bitmap.mzkp_isTextPicture = true;
            return bitmap;
        }
    
        function destroyTextPictureBitmap(bitmap) {
            if (bitmap && bitmap.mzkp_isTextPicture) {
                bitmap.destroy();
            }
        }
    	
    
    
    })();


    Спойлер Версия 1.0, устаревшая:

    Код:
    /*:
     *-----------------------------------------------------------------------------
     *  DKR PictureOnSkillObserve
     *-----------------------------------------------------------------------------
     *  For: RPGMAKER MV / MZ
     *  DKR_PictureOnSkillObserve_MV_MZ.js
     *-----------------------------------------------------------------------------
     *  24.05.2021 - Версия 1.0.0
     *-----------------------------------------------------------------------------
     * Поставляется AS-IS.
     * Вся ответственность при использовании - на Пользователе!
     *-----------------------------------------------------------------------------
     *-----------------------------------------------------------------------------
     * @author DarchanKaen
     * @plugindesc (v.1.0.0) Плагин позволяет отображать Картинку при выборе скила в бою, для каждого скила - свою.
     * @help
     *   DKR PictureOnSkillObserve
     * ----------------------------------------------------------------------------
     * ---Общая информация:
     * Плагин позволяет отображать Картинку 
     * при выборе скила в бою,
     * для каждого скила - свою.
     * Картина отображается в фоне Окна умений.
     * В Примечании к Скилу напишите:
     *<ImageOnChooseSkill>
     *Название файла картинки БЕЗ РАСШИРЕНИЯ И КАВЫЧЕК! (например: Actor1 )
     *</ImageOnChooseSkill>
     * - Включение и отключение показа Картинки:
     * DKR.PictureOnSkillObserve.enablePicture(); - показывать Картинку.
     * DKR.PictureOnSkillObserve.dissablePicture(); - не показывать Картинку. 
      - Настройки отображения Картинки:
     * DKR.PictureOnSkillObserve.setPictureNumber(); - задать номер Картинки; по-умолчанию: 1.
     * DKR.PictureOnSkillObserve.setPictureOrigin(); - задать начало координат Картинки; по-умолчанию: 0.
     * DKR.PictureOnSkillObserve.setPictureCoordX(); - задать координату X Картинки; по-умолчанию: 20.
     * DKR.PictureOnSkillObserve.setPictureCoordY(); - задать координату Y Картинки; по-умолчанию: 300.
     * DKR.PictureOnSkillObserve.setPictureScaleX(); - задать масштаб X Картинки; по-умолчанию: 100.
     * DKR.PictureOnSkillObserve.setPictureScaleY(); - задать масштаб Y Картинки; по-умолчанию: 100.
     * DKR.PictureOnSkillObserve.setPictureOpacity(); - задать прозрачность Картинки; по-умолчанию: 255.
     * DKR.PictureOnSkillObserve.setPictureBlendMode (); - задать режим смешивания Картинки; по-умолчанию: 0.
     * ----------------------------------------------------------------------------
    */ 
    
    var Imported = Imported || {};
    Imported.DKR_PictureOnSkillObserve = true;
    
    var DKR = DKR || {};          
    DKR.PictureOnSkillObserve = DKR.PictureOnSkillObserve || {}; 
    
    
    
    ( () => {
    	
    	DKR.PictureOnSkillObserve.picIsShow = true;
    	DKR.PictureOnSkillObserve.picNumber = 1;
    	DKR.PictureOnSkillObserve.picOrigin = 0;
    	DKR.PictureOnSkillObserve.picCoordX = 20;
    	DKR.PictureOnSkillObserve.picCoordY = 300;
    	DKR.PictureOnSkillObserve.picScaleX = 100;
    	DKR.PictureOnSkillObserve.picScaleY = 100;
    	DKR.PictureOnSkillObserve.picOpacity = 255;
    	DKR.PictureOnSkillObserve.picBlendMode = 0;
    	
    	
    	
    	Window_SkillList.prototype.updateHelp = function() {
    		this.setHelpWindowItem(this.item());
    
    		if(true === DKR.PictureOnSkillObserve.picIsShow){
    			try{
    				let imageSRC = parseNotesForImageSRC(this.item());
    				$gameScreen.showPicture(DKR.PictureOnSkillObserve.picNumber, imageSRC, DKR.PictureOnSkillObserve.picOrigin, DKR.PictureOnSkillObserve.picCoordX, DKR.PictureOnSkillObserve.picCoordY, DKR.PictureOnSkillObserve.picScaleX, DKR.PictureOnSkillObserve.picScaleY, DKR.PictureOnSkillObserve.picOpacity, DKR.PictureOnSkillObserve.picBlendMode);
    			}catch (e) {
    				console.log('DKR.PictureOnSkillObserve: skill not exist or wrong notetag!');
    				return;
    			}
    		}
    	
    	};
    	
    	Scene_Battle.prototype.onSkillCancel = function() {
    		this._skillWindow.hide();
    		this._actorCommandWindow.activate();
    		
    		if(true === DKR.PictureOnSkillObserve.picIsShow){
    			$gameScreen.erasePicture(DKR.PictureOnSkillObserve.picNumber);
    		}
    	};
    	
    	
    	Game_Action.prototype.apply = function(target) {
    		if(true === DKR.PictureOnSkillObserve.picIsShow){
    			$gameScreen.erasePicture(DKR.PictureOnSkillObserve.picNumber);
    		}
    		
    		var result = target.result();
    		this.subject().clearResult();
    		result.clear();
    		result.used = this.testApply(target);
    		result.missed = (result.used && Math.random() >= this.itemHit(target));
    		result.evaded = (!result.missed && Math.random() < this.itemEva(target));
    		result.physical = this.isPhysical();
    		result.drain = this.isDrain();
    		if (result.isHit()) {
    			if (this.item().damage.type > 0) {
    				result.critical = (Math.random() < this.itemCri(target));
    				var value = this.makeDamageValue(target, result.critical);
    				this.executeDamage(target, value);
    			}
    			this.item().effects.forEach(function(effect) {
    				this.applyItemEffect(target, effect);
    			}, this);
    			this.applyItemUserEffect(target);
    		}
    	};
    
    
    	let parseNotesForImageSRC = function(skill){
    		let notedata = skill.note.split(/[\r\n]+/);
    		let imageSRC = '';
    		let tag = 'ImageOnChooseSkill';
    		
    		for (let i = 0; i < notedata.length; i++) {
    			let line = notedata[i];
    			if (notedata[i].match(tag)) {
    				imageSRC = notedata[i + 1];
    				break;
    			}
    		}
    		
    		return imageSRC;
    	}
    
    
    
    	DKR.PictureOnSkillObserve.enablePicture = function(){
    		DKR.PictureOnSkillObserve.picIsShow = true;
    	}
    	
    	DKR.PictureOnSkillObserve.dissablePicture = function(){
    		DKR.PictureOnSkillObserve.picIsShow = false;
    	}
    	
    	
    	DKR.PictureOnSkillObserve.setPictureNumber = function(pNumber){
    		if(pNumber < 0){
    			console.log('DKR.PictureOnSkillObserve: picture number can`t be below zero!');
    			return;
    		}
    		DKR.PictureOnSkillObserve.picNumber = pNumber;
    	}
    	
    	DKR.PictureOnSkillObserve.setPictureOrigin = function(pOrigin){
    		DKR.PictureOnSkillObserve.picOrigin = pOrigin;
    	}
    	
    	DKR.PictureOnSkillObserve.setPictureCoordX = function(pCoordX){
    		if(pCoordX < 0){
    			console.log('DKR.PictureOnSkillObserve: picture coordinate X can`t be below zero!');
    			return;
    		}
    		DKR.PictureOnSkillObserve.picCoordX = pCoordX;
    	}
    	
    	DKR.PictureOnSkillObserve.setPictureCoordY = function(pCoordY){
    		if(pCoordY < 0){
    			console.log('DKR.PictureOnSkillObserve: picture coordinate Y can`t be below zero!');
    			return;
    		}
    		DKR.PictureOnSkillObserve.picCoordY = pCoordY;
    	}
    	
    	DKR.PictureOnSkillObserve.setPictureScaleX = function(pScaleX){
    		if(pScaleX < 0){
    			console.log('DKR.PictureOnSkillObserve: picture scale X can`t be below zero!');
    			return;
    		}
    		DKR.PictureOnSkillObserve.picScaleX = pScaleX;
    	}
    	
    	DKR.PictureOnSkillObserve.setPictureScaleY = function(pScaleY){
    		if(pScaleY < 0){
    			console.log('DKR.PictureOnSkillObserve: picture scale Y can`t be below zero!');
    			return;
    		}
    		DKR.PictureOnSkillObserve.picScaleX = pScaleX;
    	}
    	
    	DKR.PictureOnSkillObserve.setPictureOpacity = function(pOpacity){
    		DKR.PictureOnSkillObserve.picOpacity = pOpacity;
    	}
    	
    	DKR.PictureOnSkillObserve.setPictureBlendMode = function(pBlendMode ){
    		DKR.PictureOnSkillObserve.picBlendMode  = pBlendMode ;
    	}
    	
    
    })();






    Спойлер Изменения в Версии 2.0:
    1. Увеличена совместимость с другими плагинами.
    2. Оптимизировано удаление Картинки / Описания - теперь оно удаляется сразу после выбора скила (до выбора Цели).
    3. Добавлен новый функционал - отображение Описания скила.


    Спойлер Ссылки на загрузку, версия 2.0:


    Обратите внимание!
    Для корректно работы плагина в папке "\img\pictures" должен быть (!!!) файл "onSkillObserveBackground.png" - это фон Описания (размер изображения 816x624).
    Спойлер Файл фона, ПКМ и сохраните как Изображение:


    Условия поставки плагина:
    Поставляется AS-IS.
    Вся ответственность при использовании - на Пользователе!
    !

    Совместимость с другими плагинами Автор не гарантирует!

    Спойлер Лирическое отступление:
    Более продвинутая версия плагина для Seibur.
    Мне тяжело представить, зачем такое нужно...Но опыт интересный.
    2.0
    Да, описание скила может быть полезной штукой.
    На MV, правда, не очень красиво вышло.
    Последний раз редактировалось Darchan Kaen; 13.09.2022 в 18:38. Причина: Выход версии плагина 2.0...скрины перезалиты

  2. #2

    По умолчанию

    Цитата Сообщение от Darchan Kaen Посмотреть сообщение
    Мне тяжело представить, зачем такое нужно...Но опыт интересный.
    Вероятно, так можно картинкой вывести подробное описание скила, сразу со схемой и прочими полезными примечаниями, которые не влазят в обычное окошко? Если да, то круто, это может быть полезно! Но тогда хорошо бы ещё предусмотреть возможность сделать задержку перед выводом картинки, чтобы она появлялась только если игрок задержится на выбранном пункте.

  3. #3
    Бывалый Аватар для Darchan Kaen
    Информация о пользователе
    Регистрация
    17.06.2013
    Адрес
    Одесса
    Сообщений
    851
    Записей в дневнике
    3
    Репутация: 47 Добавить или отнять репутацию

    По умолчанию

    Цитата Сообщение от Alx_Yago Посмотреть сообщение
    Вероятно, так можно картинкой вывести подробное описание скила, сразу со схемой и прочими полезными примечаниями, которые не влазят в обычное окошко? Если да, то круто, это может быть полезно! Но тогда хорошо бы ещё предусмотреть возможность сделать задержку перед выводом картинки, чтобы она появлялась только если игрок задержится на выбранном пункте.
    Посмотрю что можно сделать, но обещать сейчас не могу.
    Насчет текста есть мысли, насчет паузы - с этим посложнее.

    И сразу вопрос - как лучше сделать "описание скила"?
    Варианты:
    1. Просто текст из описания.
    2. Данные объекта Скилла (урон, цели, элемент, и.т.д) автоматически.
    3. Текст, что вручную нужно будет прописывать в поле "Примечание".
    4. ...комбинации вариантов.

  4. #4

    По умолчанию

    Я имел в виду, что это можно сделать уже в текущем варианте плагина: сохранить окошко с текстом в виде картинки, и её выводить.

  5. #5
    Бывалый Аватар для Darchan Kaen
    Информация о пользователе
    Регистрация
    17.06.2013
    Адрес
    Одесса
    Сообщений
    851
    Записей в дневнике
    3
    Репутация: 47 Добавить или отнять репутацию

    По умолчанию

    Цитата Сообщение от Alx_Yago Посмотреть сообщение
    Я имел в виду, что это можно сделать уже в текущем варианте плагина: сохранить окошко с текстом в виде картинки, и её выводить.
    Так пойдет?
    Спойлер Автогенерация данных скила из самого скила + оставленное сверху описание:



    Могу добавить вариант с отключением автогенерации и заполнением вручную информации через "Примечание" внутри скила.
    Паузы нет. Окно описания скила (сверху) убирать не буду, скорее всего.

    P.S:
    Цвета в текст можно добавить, это тестовый вариант.
    Последний раз редактировалось Darchan Kaen; 26.05.2021 в 00:45.

  6. #6
    Маститый Аватар для Seibur
    Информация о пользователе
    Регистрация
    07.01.2012
    Адрес
    Изумрудный город
    Сообщений
    1,206
    Записей в дневнике
    3
    Репутация: 58 Добавить или отнять репутацию

    По умолчанию

    Не хватает тут важной информации. Шкалы МП и ХП игрока, чтобы было понятно наглядно куда тратятся очки, полоски ХП монстра, окошка для состояний. Можно сделать два окошка с лева текст, справа картинка или наоборот. Можно допилить поддержку плагинов химы где в основном меню боя вынесены не команды а скиллы, как это сделал мог в Баттл коммандс. Сумбурно накидал идей, на тот случай, если задумываешься об улучшении. Но это имхо

    Можно так же сделать выезжаение картинки с левого или правого края с постепенным появлением
    Прохлада и спокойствие мне вполне по душе

    Спойлер :

    き っ と 、 女 の 子 は お 砂 糖 と ス パ イ ス と 素 敵 な 何 か で で き て い る。

  7. #7

    По умолчанию

    Довольно классно получается.

    Цитата Сообщение от Darchan Kaen Посмотреть сообщение
    Могу добавить вариант с отключением автогенерации и заполнением вручную информации через "Примечание" внутри скила.
    А вот это реально нужная опция.

    И тогда уж вопрос, который на самом деле меня занимает: возможен ли плагин, который бы вычислял предварительный урон от скила по врагу (при выборе скила и врага писал бы над врагом циферками, типа "18-23")? Знаю, что есть проблемы с тем, чтобы использовать формулу урона напрямую, так как в ней могут накладываться бафы, или другие дополнительные вещи происходить (у меня, например, бывают весьма сложные формулы). Но, возможно, если прописывать упрощённую формулу в примечаниях, это получится реализовать?

  8. #8
    Бывалый Аватар для Darchan Kaen
    Информация о пользователе
    Регистрация
    17.06.2013
    Адрес
    Одесса
    Сообщений
    851
    Записей в дневнике
    3
    Репутация: 47 Добавить или отнять репутацию

    По умолчанию

    Цитата Сообщение от Seibur Посмотреть сообщение
    ...
    Спасибо за идеи, но в ближайшее время я это делать не буду - есть планы более полезных (субъективно) плагинов.
    Полоски ХП - есть мысль сделать такой плагин для мобов на МЗ (ну как сделать, портировать чужой с МВ).

    Цитата Сообщение от Alx_Yago Посмотреть сообщение
    ...
    Спасибо.
    Ну и тебе за идею "описания скилов" тоже спасибо - понял что, мне это тоже пригодится.
    "Вычислял предварительный урон" - хорошая идея, будет полезно...посмотрю что можно сделать; если сделаю - то не очень скоро и в рамках отдельного плагина.

    До конца этой недели планирую обновление данного плагина.

  9. #9
    Бывалый Аватар для Darchan Kaen
    Информация о пользователе
    Регистрация
    17.06.2013
    Адрес
    Одесса
    Сообщений
    851
    Записей в дневнике
    3
    Репутация: 47 Добавить или отнять репутацию

    По умолчанию

    Обновил плагин до версии 2.0.

    Изменения в Версии 2.0:
    1. Увеличена совместимость с другими плагинами.
    2. Оптимизировано удаление Картинки / Описания - теперь оно удаляется сразу после выбора скила (до выбора Цели и нанесения урона).
    3. Добавлен новый функционал - отображение Описания скила.

    Спойлер Выглядит это вот так:
    MV, режим 'DESCR':

    MZ, режим 'DATA':



    На MZ красивее, т.к. там больше свободного места для окна. По-хорошему, на MV нужно переделывать Сцену выбора скилов, но этим (пока) не заморачивался.
    Кто может и хочет - дорабатывайте на здоровье.

    Подробности в топик-старте.

    В ближайшем будущем плагин дорабатываться не будет.

  10. #10
    Бывалый Аватар для ВесёлыйРоджер
    Информация о пользователе
    Регистрация
    25.03.2017
    Адрес
    Украина
    Сообщений
    759
    Записей в дневнике
    9
    Репутация: 23 Добавить или отнять репутацию

    По умолчанию

    Скриншоты не работают

Страница 1 из 2 12 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Метки этой темы

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •  
[MV -+ MZ]PictureOnSkillObserve